package com.rainbow.bam.base;

import java.io.Serializable;
import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;

import com.rainbow.bam.entity.PaginationRequest;
import com.rainbow.bam.entity.PaginationResponse;

/**
 * 扩展DAO
 * 
 * @author HarrisonHan
 * @version $Id: BaseRepository.java, v 0.1 2015年10月23日 下午4:17:27 HarrisonHan Exp $
 */
public interface BaseRepository<T, ID extends Serializable> extends JpaRepository<T, ID> {

    /**
     * merge 
     * 
     * @param obj ： 目标 object
     * @return merger 后的 object
     */
    public T merge(T obj);

    /**
     * 根据分页对象进行分页查询
     * 
     * @param pagination 分页请求对象
     * @return 分页请求响应结果对象
     */
    public PaginationResponse<T> findResultsByPagination(PaginationRequest pagination);
    /**
     * HQL执行语句返回HQL语句对象集合
     * @param hql
     * @return
     */
    public List<T> findListByHql(String hql);
    /**
     * 执行SQL语句返回指定对象集合
     * @param entityClass
     * @param sql
     * @return
     */
    public List<T> findAllBySql(Class<T> entityClass, String sql) ;
}